// using System;
// using System.Collections.Generic;
// using System.Runtime.Remoting.Messaging;
// using System.Text.RegularExpressions;
// using UnityEngine.UI;
// using UnityEngine;
// using UnityEditor;
// using UnityEditor.UI;
// using Yoozoo.UI.YGUI.TextEditor;
// using Yoozoo.UI;
// using System.Text;
// using System.Security.Cryptography;
// using Yoozoo.Gameplay.YGUICustom;
//
// namespace Yoozoo.UI.YGUI
// {
//     [CustomEditor(typeof(YEmojiText), true)]
//     [CanEditMultipleObjects]
//     public class YEmojiTextEditor : YTextEditor
//     {
//         protected SerializedProperty m_EmojiText;
//         protected SerializedProperty m_FontData;
//         protected FontDataEditor fontDrawer; 
//         SerializedProperty m_Dirty;
//         SerializedProperty m_Style;
//         SerializedProperty m_StyleColor;
//         
//         SerializedProperty m_LetterSpacing;
//         SerializedProperty m_NumberMode;
//         SerializedProperty m_Format;
//         SerializedProperty m_Duration;
//         SerializedProperty m_OnTweenComplete;
//
//         private SerializedProperty m_IsLocalized;
//         private SerializedProperty m_LocalizationKey;
//         
//         private string oldKey;
//         YEmojiText m_yEmojiText;
//         protected override void OnEnable()
//         {
//             base.OnEnable();
//             m_yEmojiText = target as YEmojiText;
//             m_EmojiText = serializedObject.FindProperty("m_EmojiText");
//             m_Dirty = serializedObject.FindProperty("m_Dirty");
//             fontDrawer = new FontDataEditor();
//             m_FontData = serializedObject.FindProperty("m_FontData");
//             m_Style = serializedObject.FindProperty("m_Style");
//             m_StyleColor = serializedObject.FindProperty("m_StyleColor");
//             m_LetterSpacing = serializedObject.FindProperty("m_LetterSpacing");
//             m_NumberMode = serializedObject.FindProperty("m_NumberMode");
//             m_Format = serializedObject.FindProperty("m_Format");
//             m_Duration = serializedObject.FindProperty("m_Duration");
//             m_OnTweenComplete = serializedObject.FindProperty("m_OnTweenComplete");
//             m_IsLocalized = serializedObject.FindProperty("m_IsLocalized");
//             m_LocalizationKey = serializedObject.FindProperty("m_LocalizationKey");
//             
//             oldKey = GenerateLocalizationKey(m_EmojiText.stringValue);
//         }
//         
//         public override void OnInspectorGUI()
//         {
//             
//             if (m_Dirty.boolValue)
//             {
//                 m_yEmojiText.DrawEmoji();
//             }
//             
//             serializedObject.Update();
//
//             TextEditorUtility.DrawTextStyleField(new GUIContent("Text Style"), m_Style,this);
//             
//             TextEditorUtility.DrawTextColorStyleField(new GUIContent("Text Color Style"),  m_StyleColor);
//             
//             EditorGUILayout.PropertyField(m_LetterSpacing,new GUIContent("Letter Spacing"));
//             
//             DrawTextArea();
//
//             EditorGUILayout.Space();
//             
//             DrawFont();
//
//             AppearanceControlsGUI();
//             RaycastControlsGUI();
//             MaskableControlsGUI();
//             
//             EditorGUILayout.PropertyField(m_NumberMode);
//             if (EditorGUILayout.BeginFadeGroup(m_NumberMode.boolValue ? 1: 0))
//             {
//                 EditorGUI.indentLevel++;
//                 EditorGUILayout.PropertyField(m_Format);
//                 EditorGUILayout.PropertyField(m_Duration);
//                 EditorGUILayout.PropertyField(m_OnTweenComplete);
//                 EditorGUI.indentLevel--;
//             }
//             EditorGUILayout.EndFadeGroup();
//
//             EditorGUILayout.PropertyField(m_IsLocalized);
//             if (EditorGUILayout.BeginFadeGroup(m_IsLocalized.boolValue ? 1 : 0))
//             {
//                 EditorGUI.indentLevel++;
//                 
//                 EditorGUILayout.BeginHorizontal();
//                 EditorGUILayout.PropertyField(m_LocalizationKey);
//                 if (GUILayout.Button("生成Key"))
//                 {
//                     m_LocalizationKey.stringValue = GenerateLocalizationKey(m_EmojiText.stringValue);
//                     oldKey = m_LocalizationKey.stringValue;
//                 }
//                 EditorGUILayout.EndHorizontal();
//                 
//                 if (!CheckLocalizationKey(m_LocalizationKey.stringValue))
//                 {
//                     GUIStyle guiStyle = new GUIStyle(EditorStyles.label);
//                     guiStyle.normal.textColor = Color.red;
//                     EditorGUILayout.LabelField("Localization Key仅能由小写字母，数字和“-”，“_”组成.", guiStyle);
//                 }
//                 
//                 EditorGUI.indentLevel--;
//             }
//             EditorGUILayout.EndFadeGroup();
//
//             serializedObject.ApplyModifiedProperties();
//
//             refreshTextLetterSpacing();
//         }
//
//         private void refreshTextLetterSpacing()
//         {
//             if (target != null && (target.GetType() == typeof(YText) || target.GetType() == typeof(YRichText)))
//             {
//                 (target as YEmojiText).letterSpacing = m_LetterSpacing.floatValue;
//             }
//         }
//
//         public virtual void DrawTextArea()
//         {   
//             
//             EditorGUILayout.PropertyField(m_EmojiText);
//             EditorGUI.BeginDisabledGroup(true);
//             EditorGUILayout.PropertyField(m_Text, new GUIContent("OutText"));
//             EditorGUI.EndDisabledGroup();
//         }
//
//         public virtual void DrawFont() 
//         {
//             float h = fontDrawer.GetPropertyHeight(m_FontData, new GUIContent(""));
//             Rect rect = EditorGUILayout.GetControlRect(false, h);
//             fontDrawer.OnGUI(rect, m_FontData, new GUIContent(""));
//         }
//
//         protected void AppearanceControlsGUI()
//         {
//             if (m_StyleColor.objectReferenceValue == null)
//             {
//                 EditorGUILayout.PropertyField(m_Color);
//             }
//             else
//             {
//                 EditorGUI.BeginDisabledGroup(true);
//                 EditorGUILayout.PropertyField(m_Color);
//                 EditorGUI.EndDisabledGroup();
//             }
//             
//             EditorGUILayout.PropertyField(m_Material);
//         }
//
//         private bool CheckLocalizationKey(string s)
//         {
//             // 合法性检查
//             /*if (string.IsNullOrEmpty(s))
//             {
//                 return false;
//             }*/
//             Regex regex = new Regex("^[a-z0-9_-]*$");
//             if (!regex.IsMatch(s))
//             {
//                 return false;
//             }
//             return true;
//         }
//         
//         public static string GenerateLocalizationKey(string s)
//         {
//             if (string.IsNullOrEmpty(s))
//             {
//                 return string.Empty;
//             }
//             
//             // md5哈希
//             byte[] tmpData = Encoding.UTF8.GetBytes(s);
//             byte[] tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpData);
//
//             StringBuilder res = new StringBuilder();
//             foreach (byte b in tmpHash)
//             {
//                 res.AppendFormat("{0:x2}",b);
//             }
//
//             // 最多后两位字符的Unicode编码
//             string tmpS = string.Empty;
//             if (s.Length == 1)
//             {
//                 tmpS = s;
//             }
//             else if (s.Length >= 2)
//             {
//                 tmpS = s.Substring(0, 2);
//             }
//             
//             tmpData = Encoding.Unicode.GetBytes(tmpS);
//             foreach (byte b in tmpData)
//             {
//                 res.AppendFormat("{0:x2}",b);
//             }
//
//             return res.ToString();
//         }
//     }
// }
